import { notification } from 'antd';
import { getGlobalMessageApi } from '../contexts/MessageContext';

/**
 * 模拟数据通知器
 */
class MockDataNotifier {
    constructor() {
        this.hasShownGlobalNotice = false;
        this.apiCallCount = 0;
    }

    /**
     * 显示模拟数据提示
     * @param {string} apiName - API接口名称
     * @param {object} options - 配置选项
     */
    notifyMockData(apiName = '', options = {}) {
        this.apiCallCount++;

        const {
            showMessage = true,
            showDetailedInfo = false,
            duration = 3
        } = options;

        // 显示简单提示消息
        if (showMessage) {
            const messageApi = getGlobalMessageApi();
            if (messageApi) {
                messageApi.info(`🔧 使用模拟数据${apiName ? ` (${apiName})` : ''}`, duration);
            } else {
                console.warn('消息 API 尚未初始化，请确保 MessageProvider 已正确配置');
            }
        }

        // 首次使用模拟数据时显示详细通知
        if (!this.hasShownGlobalNotice && showDetailedInfo) {
            this.showGlobalNotice();
        }

        // 开发环境下的控制台信息
        if (process.env.NODE_ENV === 'development') {
            console.group('🔧 模拟数据调用');
            console.log(`API: ${apiName || '未知接口'}`);
            console.log(`调用次数: ${this.apiCallCount}`);
            console.log('时间:', new Date().toLocaleTimeString());
            console.groupEnd();
        }
    }

    /**
     * 显示全局模拟数据通知
     */
    showGlobalNotice() {
        notification.info({
            message: '演示模式',
            description: '🔧 当前系统运行在演示模式下\n📊 所有数据均为模拟数据，仅供功能展示\n🌐 请检查网络连接或联系管理员',
            duration: 8,
            placement: 'topRight',
            style: {
                width: 350,
            },
        });
        this.hasShownGlobalNotice = true;
    }

    /**
     * 重置通知状态
     */
    reset() {
        this.hasShownGlobalNotice = false;
        this.apiCallCount = 0;
    }

    /**
     * 获取调用统计
     */
    getStats() {
        return {
            callCount: this.apiCallCount,
            hasShownNotice: this.hasShownGlobalNotice
        };
    }

    /**
     * 测试方法 - 手动触发模拟数据提示
     */
    testNotification(apiName = '测试API') {
        this.notifyMockData(apiName, {
            showMessage: true,
            showDetailedInfo: true,
            duration: 4
        });
    }
}

// 创建单例实例
const mockDataNotifier = new MockDataNotifier();

// 开发环境下添加全局测试方法
if (typeof window !== 'undefined' && process.env.NODE_ENV === 'development') {
    window.__testMockDataNotification = () => {
        mockDataNotifier.testNotification('手动测试API');
        console.log('🧪 测试模拟数据提示已触发');
    };
}

export default mockDataNotifier;
